\documentclass{sig-alternate-05-2015}
\usepackage[utf8]{inputenc}
\usepackage{color}

\def\inputfig#1{\input #1}
\def\inputtex#1{\input #1}
\def\inputal#1{\input #1}
\def\inputcode#1{\input #1}
\newcommand\inputeps[1]{\includegraphics[width=\linewidth]{#1}}

\inputtex{logos.tex}
\inputtex{refmacros.tex}
\inputtex{other-macros.tex}

\begin{document}
\conferenceinfo{10th ELS}{April 3--4, 2017, Brussels, Belgium}
\setcopyright{rightsretained}

\title{Fast, Maintainable, and Portable Sequence Functions
  \titlenote{The code presented in this article is available at\\
    \url{https://github.com/idurand/cl-portable-find.git}}}

\numberofauthors{1}
\author{\alignauthor
Irène Durand\\
Robert Strandh\\
\affaddr{University of Bordeaux}\\
\affaddr{351, Cours de la Libération}\\
\affaddr{Talence, France}\\
\email{irene.durand@u-bordeaux.fr}
\email{robert.strandh@u-bordeaux.fr}}

%% \toappear{Permission to make digital or hard copies of all or part of
%%   this work for personal or classroom use is granted without fee
%%   provided that copies are not made or distributed for profit or
%%   commercial advantage and that copies bear this notice and the full
%%   citation on the first page. Copyrights for components of this work
%%   owned by others than the author(s) must be honored. Abstracting with
%%   credit is permitted. To copy otherwise, or republish, to post on
%%   servers or to redistribute to lists, requires prior specific
%%   permission and/or a fee. Request permissions from
%%   Permissions@acm.org.

%%   ELS '17, April 3 -- 6 2017, Brussels, Belgium
%%   Copyright is held by the owner/author(s). %Publication rights licensed to ACM.
%% %  ACM 978-1-4503-2931-6/14/08\$15.00.
%% %  http://dx.doi.org/10.1145/2635648.2635654
%% }

\maketitle

\begin{abstract}
The \commonlisp{} sequence functions are challenging to implement
because of the numerous cases that need to be taken into account
according to the keyword arguments given and the type of the sequence
argument, including the element type when the sequence is a vector.

For the resulting code to be fast, the different cases need to be
handled separately, but doing so may make the code hard to understand
and maintain.  Writing tests that cover all cases may also be
difficult.

In this paper, we present a technique that relies on a good compiler
to optimize each separate case according to the information available
to it with respect to types and values of keyword arguments.  Our
technique uses a few custom macros that duplicate a general
implementation of the body of a sequence function.  The compiler then
specializes that body in different ways for each copy.
\end{abstract}

 \begin{CCSXML}
<ccs2012>
<concept>
<concept_id>10011007.10010940.10010971.10011682</concept_id>
<concept_desc>Software and its engineering~Abstraction, modeling and modularity</concept_desc>
<concept_significance>500</concept_significance>
</concept>
<concept>
<concept_id>10011007.10010940.10011003.10011002</concept_id>
<concept_desc>Software and its engineering~Software performance</concept_desc>
<concept_significance>500</concept_significance>
</concept>
<concept>
<concept_id>10011007.10011006.10011041</concept_id>
<concept_desc>Software and its engineering~Compilers</concept_desc>
<concept_significance>500</concept_significance>
</concept>
</ccs2012>
\end{CCSXML}

\ccsdesc[500]{Software and its engineering~Abstraction, modeling and modularity}
\ccsdesc[500]{Software and its engineering~Software performance}
\ccsdesc[500]{Software and its engineering~Compilers}

\printccsdesc

\keywords{\commonlisp{}, Compiler optimization, Portability, Maintainability}

\inputtex{spec-macros.tex}

\inputtex{sec-introduction.tex}
\inputtex{sec-previous.tex}
\inputtex{sec-our-method.tex}
\inputtex{sec-performance.tex}
\inputtex{sec-conclusions.tex}
\inputtex{sec-acknowledgements.tex}

\bibliographystyle{abbrv}
\bibliography{sequence-functions}
\inputtex{app-protocol.tex}
\inputtex{app-implementation.tex}
\end{document}
